package controllers

import (
	"chuanyou4/db"
	"chuanyou4/models"
	"crypto/tls"
	"encoding/json"
	"fmt"

	beego "github.com/beego/beego/v2/server/web"
	"gopkg.in/gomail.v2"
)

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	c.Data["Website"] = "beego.me"
	c.Data["Email"] = "astaxie@gmail.com"
	c.TplName = "index.tpl"
}

func (c *MainController) Login() {
	c.TplName = "login.html"
}

func (c *MainController) Zhuce() {
	c.Data["Website"] = "注册"
	c.Data["Email"] = "astaxie@gmail.com"
	c.TplName = "index.tpl"
}

func (c *MainController) Zhuanzhang() {
	c.Data["Sender"] = "转账二字"
	c.Data["Receiver"] = "astaxie@gmail.com"
	c.TplName = "zhuanzhang.html"
}

func (c *MainController) YanzhengLogin() {
	var sn = c.GetString("sn")
	var pswd = c.GetString("pswd")
	fmt.Println("收到前端传过来的学号：", sn, "密码是:", pswd)
	// 先用假数据 判断一下，后续再用db
	var currentPerson models.Classmates
	db.DB.Raw("select * from chuanyou.classmates where sn=?", sn).Scan(&currentPerson)

	if currentPerson.Pswd == pswd {
		c.Data["json"] = currentPerson
	} else {
		c.Data["json"] = nil
	}
	c.ServeJSON()
}

// 新用户注册
func (c *MainController) Register() {

	c.TplName = "zhuce.html"
}

// 接收并处理新用户注册的数据
func (c *MainController) DoRegister() {
	// 用一个变量来接收  前端的数据
	var userinfo models.Classmates
	// 解码 前端发过来的json  到userinfo 变量里
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &userinfo)
	if err != nil {
		fmt.Println("接收用户注册信息报错：", err.Error())
		c.Data["json"] = err.Error()
		c.ServeJSON()
		return
	}
	// 将数据转换为SQL 存入数据库
	tx := db.DB.Create(userinfo)
	if tx.Error != nil {
		c.Data["json"] = "注册失败"
		c.ServeJSON()
		return
	}

	c.Data["json"] = "注册成功"
	c.ServeJSON()
}

func (c *MainController) SendEmail() error {

	// QQ 邮箱：
	host := "smtp.qq.com"
	port := 25
	userName := "82566264@qq.com"
	password := "oddgajplkquhbhdh"

	m := gomail.NewMessage()
	m.SetHeader("From", "82566264@qq.com") // 发件人
	// m.SetHeader("From", "alias"+"<"+userName+">") // 增加发件人别名

	m.SetHeader("To", "3371446100@qq.com")  // 收件人，可以多个收件人，但必须使用相同的 SMTP 连接
	m.SetHeader("Cc", "3371446100@qq.com")  // 抄送，可以多个
	m.SetHeader("Cc", "3371446100@qq.com")  // 抄送，可以多个
	m.SetHeader("Bcc", "3371446100@qq.com") // 暗送，可以多个
	m.SetHeader("Subject", "大家好,我是李浩东!")    // 邮件主题

	// text/html 的意思是将文件的 content-type 设置为 text/html 的形式，浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
	// 可以通过 text/html 处理文本格式进行特殊处理，如换行、缩进、加粗等等
	m.SetBody("text/html", `  <p> Hello  四川邮电职业技术学院 </p>  `)

	// text/plain的意思是将文件设置为纯文本的形式，浏览器在获取到这种文件时并不会对其进行处理
	// m.SetBody("text/plain", "纯文本")
	m.Attach("static/img/b_9eafee394b7c59427b0186d0b2f407d2.jpg") // 照片

	d := gomail.NewDialer(
		host,
		port,
		userName,
		password,
	)
	// 关闭SSL协议认证
	d.TLSConfig = &tls.Config{InsecureSkipVerify: true}

	if err := d.DialAndSend(m); err != nil {
		panic(err)

	}
	return nil
}
